package filter;

import javax.servlet.*;
import java.io.IOException;

public class AFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    /*
        FilterChain注意事项
        1.多个filter和目标资源在一次http请求，在同一个线程中
        2.当一个请求url和filter的url-pattern匹配时，才会被执行。如果有多个被匹配上，就会顺序执行，形成一个filter调用链
        3.多个filter共同执行时，因为是一次http请求，所以使用一个request对象
        4.多个filter顺序执行，和web.xml配置顺序保持一致
        5.chain.doFilter(req, resp)方法 将执行下一个过滤器的doFiler方法，如果后面没有过滤器，则执行目标资源
        6.执行过滤器链时，顺序是:Http请求->A过滤器doFilter()->A过滤器前置代码->A过滤器chain.doFilter()
            ->B过滤器doFilter()->B过滤器前置代码->B过滤器chain.doFilter()->目标文件->B过滤器后置代码->A过滤器后置代码->返回给浏览器页面/数据
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        System.out.println("AFilter ---> 线程id=" + Thread.currentThread().getName());
        System.out.println("AFilter doFilter 的前置代码..");
        System.out.println("执行 AFilter doFilter()");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("AFilter doFilter 的后置代码..");
    }

    @Override
    public void destroy() {
    }
}
